// 题目链接：https://www.luogu.com.cn/problem/P4554

#include <iostream>
#include <algorithm>
#include <cstring>
#include <deque>
using namespace std;

#define x first
#define y second
typedef pair<int, int> PII; // 定义坐标类型

const int N = 505;
const int M = 505;

char g[N][M];   // 存储网格地图
int cost[N][M]; // 记录到达每个点的最小代价（-1表示未访问）
deque<PII> q;   // 使用双端队列实现0-1 BFS

int n, m;           // 网格的行数和列数
int x1, y1, x2, y2; // 起点和终点坐标（输入时为1-based）

int dx[] = {-1, 0, 0, 1}; // 四个方向的行偏移量
int dy[] = {0, -1, 1, 0}; // 四个方向的列偏移量

// 双端队列BFS算法，返回从起点到终点的最小代价
int BFS()
{
    q.push_front({x1, y1}); // 起点入队（优先处理低代价路径）
    cost[x1][y1] = 0;       // 起点代价为0

    while (!q.empty())
    {
        auto t = q.front(); // 取出队列前端元素
        q.pop_front();

        // 遍历四个方向
        for (int i = 0; i < 4; ++i)
        {
            int a = t.x + dx[i];
            int b = t.y + dy[i];

            // 边界检查
            if (a < 0 || a >= n || b < 0 || b >= m)
                continue;
            // 跳过已访问节点
            if (cost[a][b] != -1)
                continue;

            // 判断当前节点与相邻节点颜色是否相同
            if (g[a][b] == g[t.x][t.y])
            {
                // 颜色相同：代价不变，插入队列前端（优先处理）
                q.push_front({a, b});
                cost[a][b] = cost[t.x][t.y];
            }
            else
            {
                // 颜色不同：代价+1，插入队列后端
                q.push_back({a, b});
                cost[a][b] = cost[t.x][t.y] + 1;
            }

            // 提前检查是否到达终点（关键优化）
            if (a == x2 && b == y2)
                return cost[x2][y2];
        }
    }
    return -1; // 无法到达终点
}

int main()
{
    while (cin >> n >> m, n || m)
    {                                  // 输入结束条件：n=0且m=0
        q.clear();                     // 清空队列
        memset(cost, -1, sizeof cost); // 初始化代价数组

        // 读取网格数据
        for (int i = 0; i < n; ++i)
        {
            scanf("%s", g[i]);
        }
        // 读取起点和终点坐标
        scanf("%d %d %d %d", &x1, &y1, &x2, &y2);

        int res = BFS();     // 执行BFS算法
        printf("%d\n", res); // 输出结果
    }
    return 0;
}